package com.itheima.health.controller;

import com.itheima.health.common.MessageConst;
import com.itheima.health.entity.Result;
import com.itheima.health.service.ReportService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

/**
 * 数据报告控制器
 */
@RestController
@RequestMapping("/report")
@Slf4j
public class ReportController {
    @Autowired
    private ReportService reportService;


    /**
     * 运营统计
     *
     * @return
     */
    @GetMapping("/getBusinessReportData")
    public Result getBusinessReportData() {
        Map operationalStatistics = reportService.getBusinessReportData();
        return new Result(true, MessageConst.ACTION_SUCCESS, operationalStatistics);
    }


    /**
     * 套餐预约情况统计
     *
     * @param
     */
    @GetMapping("/getSetmealReport")
    public Result getSetmealReport() {
        Map<String, Object> map = reportService.getSetmealReport();
        return new Result(true, MessageConst.GET_SETMEAL_COUNT_REPORT_SUCCESS, map);
    }

    @GetMapping("/exportBusinessReport")
    public void exportBusinessReport(HttpServletResponse response) {
        //1.调用service层方法,获取下载模板表中信息
        Map<String, String> excelMap = reportService.findExcelMap();
        //2.将模板表格读到应用中
        InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("report_template.xlsx");
        XSSFWorkbook workbook = null;
        try {
            //3.用模板创建一个表格
            workbook = new XSSFWorkbook(resourceAsStream);
        } catch (IOException e) {
            log.error("创建模板失败");
            e.printStackTrace();
        }
        //4.获取第一张工作表
        XSSFSheet sheet = workbook.getSheetAt(0);
        //5.获取第3行对象
        XSSFRow row = sheet.getRow(2);
        //6.获取第3行,第六个格子--对象 日期
        row.getCell(5).setCellValue(excelMap.get("today"));
        //7.获取第5行,第六个格子 新增会员数
        sheet.getRow(4).getCell(5).setCellValue(excelMap.get("countNewMember"));
        //8.获取第5行,第八个格子 总会员数
        sheet.getRow(4).getCell(7).setCellValue(excelMap.get("countTotalMember"));
        //9.获取第6行,第六个格子 本周新增会员数
        sheet.getRow(5).getCell(5).setCellValue(excelMap.get("countWeekNewMember"));
        //10.获取第6行,第八个格子 本月新增会员数
        sheet.getRow(5).getCell(7).setCellValue(excelMap.get("countMonthNewMember"));
        //11.获取第8行,第六个格子 今日预约数
        sheet.getRow(7).getCell(5).setCellValue(excelMap.get("countOrderNumber"));
        //12.获取第8行,第八个格子 今日到诊数
        sheet.getRow(7).getCell(7).setCellValue(excelMap.get("countVisitsNumber"));
        //13.获取第9行,第六个格子 本周预约数
        sheet.getRow(8).getCell(5).setCellValue(excelMap.get("countWeekOrderNumber"));
        //14.获取第9行,第八个格子 本周到诊数
        sheet.getRow(8).getCell(7).setCellValue(excelMap.get("countWeekOrderNumber"));
        //15.获取第10行,第六个格子 本月预约数
        sheet.getRow(9).getCell(5).setCellValue(excelMap.get("countMonthOrderNumber"));
        //16.获取第10行,第八个格子 本月到诊数
        sheet.getRow(9).getCell(7).setCellValue(excelMap.get("countMonthVisitsNumber"));
        //17.获取第13行,第五个格子 套餐名称1
        sheet.getRow(12).getCell(4).setCellValue(excelMap.get("hotSetmeal1"));
        //18.获取第13行,第六个格子 预约数量
        sheet.getRow(12).getCell(5).setCellValue(excelMap.get("number1"));
        //19.获取第13行,第七个格子 占比
        sheet.getRow(12).getCell(6).setCellValue(excelMap.get("proportion1"));
        //20.获取第14行,第五个格子 套餐名称2
        sheet.getRow(13).getCell(4).setCellValue(excelMap.get("hotSetmeal2"));
        //21.获取第14行,第六个格子 预约数量
        sheet.getRow(13).getCell(5).setCellValue(excelMap.get("number2"));
        //22.获取第14行,第七个格子 占比
        sheet.getRow(13).getCell(6).setCellValue(excelMap.get("proportion2"));

        OutputStream output = null;
        try {
             output=response.getOutputStream();

        } catch (IOException e) {
            log.error("获取文件输出流失败..");
            e.printStackTrace();
        }
        response.reset();
        response.setHeader("Content-disposition", "attachment; filename=demo.xlsx");
        response.setContentType("application/x-xlsx");
        try {
            workbook.write(output);
        } catch (IOException e) {
            log.error("文件写出遇到位置错误....");
            e.printStackTrace();
        }finally {
            try {
                output.flush();
                output.close();
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @GetMapping("/getMemberReport")
    public Result getMemberReport(){
//        Map<String,List> map = reportService.getMemberReport();
        Map<String, List> memberReport = reportService.getMemberReport();
        return new Result(true,MessageConst.GET_MEMBER_NUMBER_REPORT_SUCCESS,memberReport);
    }
}
